package Controlador;

import java.awt.Color;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import Modelo.Alumno;
import Vista.VistaEstudiante;
import Vista.VistaMenu;
import Vista.VistaProfesor;
import Vista.VistaReportesAlumnos;
import Vista.vistaInfSeccion;
import Vista.principal;

public class ctrlMenu implements ActionListener,ItemListener{
	
public VistaMenu vistaMenu;


	public ctrlMenu(VistaMenu vMenu)
	{
		vistaMenu=vMenu;
		
	
	}
	
	public void actionPerformed(ActionEvent ae) {
		String arg =(String)ae.getActionCommand();
		if(arg.equals("Asignar")){
			VistaProfesor vp=new VistaProfesor();
			vp.setLocation(50, 50);
			vp.setResizable(false);
			vp.setSize(290,300);
			vp.setVisible(true);
			vp.txtCedula.requestFocus();
		}
		if (arg.equals("Registrar")){
			VistaEstudiante i = new VistaEstudiante();
			i.setLocation(50, 50);
			i.setResizable(false);
			i.setSize(360,300);
			i.setVisible(true);
			i.txtCedula.requestFocus();
			i.btnRegistrar.setEnabled(false);
			i.btnLimpiar.setEnabled(false);
			i.btnRetirar.setVisible(false);
			i.txtApellido.setEditable(false);
			i.txtNombre.setEditable(false);
			i.lblNotaFinal.setVisible(false);
			i.txtNotaFinal.setVisible(false);
			
		}
	if (arg.equals("Retirar")){
		boolean hayEstudiante=false;
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
		VistaEstudiante i = new VistaEstudiante();
		i.setLocation(50, 50);
		i.setResizable(false);
		i.setSize(360,300);
		i.setVisible(true);
		i.txtCedula.requestFocus();
		i.btnRegistrar.setEnabled(false);
		i.btnRegistrar.setVisible(false);
		i.btnLimpiar.setEnabled(false);
		i.btnRetirar.setEnabled(false);
		i.txtApellido.setEditable(false);
		i.txtNombre.setEditable(false);
		i.lblNotaFinal.setVisible(false);
		i.txtNotaFinal.setVisible(false);
		}
		else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
						"Informacion de reporte estudiantes por cedula", 
						JOptionPane.INFORMATION_MESSAGE);
	}
	if (arg.equals("Buscar")){
		boolean hayEstudiante=false;
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
		VistaEstudiante i = new VistaEstudiante();
		i.setLocation(50, 50);
		i.setResizable(false);
		i.setSize(360,300);
		i.setVisible(true);
		i.txtCedula.requestFocus();
		i.btnRegistrar.setEnabled(false);
		i.btnRegistrar.setVisible(false);
		i.btnRetirar.setVisible(false);
		i.btnRetirar.setEnabled(false);
		i.txtApellido.setEditable(false);
		i.txtNombre.setEditable(false);
		i.txtNotaFinal.setEditable(false);
		i.txtCedula.setBackground(Color.LIGHT_GRAY);
		}
		else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
						"Informacion de reporte estudiantes por cedula", 
						JOptionPane.INFORMATION_MESSAGE);
		
	}
	if (arg.equals("Estudiantes por Cedula")){
		Vector<Alumno> alumnos;
		boolean hayEstudiante=false;
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
			alumnos=principal.seccion.ordenarEstudiantesCedula();
			try {
				imprimirTxt(alumnos,"Estudiantes Ordenados por cedula.txt");
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
			VistaReportesAlumnos visRepAlum=new VistaReportesAlumnos("Estudiantes ordenados por cedula",alumnos);
			visRepAlum.pack();
			visRepAlum.setLocation(300,300);
			visRepAlum.setVisible(true);
	              }	
		else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
						"Informacion de reporte estudiantes por cedula", 
						JOptionPane.INFORMATION_MESSAGE);
	}
	if (arg.equals("Estudiantes por Nota Final")){
		boolean hayEstudiante=false;
		boolean presentaron=false;
		Vector<Alumno> alumnos;
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
			presentaron=this.presentaronEvaluacion();
			if(presentaron){
				alumnos=principal.seccion.getAlumnos();
				alumnos=principal.seccion.ordenarEstudiantesNotaF(alumnos);
				try {
					imprimirTxt(alumnos,"Estudiantes Ordenados por nota final.txt");
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
				VistaReportesAlumnos visRepAlum=new VistaReportesAlumnos("Estudiantes ordenados por nota final",alumnos);
				visRepAlum.pack();
				visRepAlum.setLocation(300,300);
				visRepAlum.setVisible(true);
		    }
			else
				JOptionPane.showMessageDialog(null, "Los estudiantes de la seccion no han  presentaron la evaluacion", 
						"Informacion de reporte estudiantes por nota final", 
						JOptionPane.INFORMATION_MESSAGE);
		    }
		    else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
						"Informacion de reporte estudiantes por nota final", 
						JOptionPane.INFORMATION_MESSAGE);
	}
	if (arg.equals("Estudiantes Aprobados")){
		boolean hayEstudiante=false;
		boolean presentaron=false;
		Vector<Alumno> alumnos;
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
			presentaron=this.presentaronEvaluacion();
			if(presentaron){
				alumnos=principal.seccion.ordenarEstudiantesNotaF(principal.seccion.getAlumnos());
				try {
					alumnos=principal.seccion.estudiantesAprobados(alumnos);
					imprimirTxt(alumnos,"Estudiantes Aprobados.txt");
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
				if(!alumnos.isEmpty()){
				VistaReportesAlumnos visRepAlum=new VistaReportesAlumnos("Estudiantes probados en la seccion",alumnos);
				visRepAlum.pack();
				visRepAlum.setLocation(300,300);
				visRepAlum.setVisible(true);
				}
				else
					JOptionPane.showMessageDialog(null, "No hay estudiantes aprobados en la seccion", 
							"Informacion de reporte estudiantes aprobados", 
							JOptionPane.INFORMATION_MESSAGE);
		    }
			else
				JOptionPane.showMessageDialog(null, "Los estudiantes de la seccion no han  presentaron la evaluacion", 
						"Informacion de apliacion de evaluacion", 
						JOptionPane.INFORMATION_MESSAGE);
		    }
		    else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
						"Informacion de reporte estudiantes por nota final", 
						JOptionPane.INFORMATION_MESSAGE);
	}
	if (arg.equals("Estudiantes Aplazados")){
		boolean hayEstudiante=false;
		boolean presentaron=false;
		Vector<Alumno> alumnos;
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
			presentaron=this.presentaronEvaluacion();
			if(presentaron){
				alumnos=principal.seccion.ordenarEstudiantesNotaF(principal.seccion.getAlumnos());
				try {
					alumnos=principal.seccion.estudiantesAplazados(alumnos);
					imprimirTxt(alumnos,"Estudiantes Aplazados.txt");
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
				if(!alumnos.isEmpty()){
				VistaReportesAlumnos visRepAlum=new VistaReportesAlumnos("Estudiantes probados en la seccion",alumnos);
				visRepAlum.pack();
				visRepAlum.setLocation(300,300);
				visRepAlum.setVisible(true);
				}
				else
					JOptionPane.showMessageDialog(null, "No hay estudiantes aplazados en la seccion", 
							"Informacion de reporte estudiantes aprobados", 
							JOptionPane.INFORMATION_MESSAGE);
		    }
			else
				JOptionPane.showMessageDialog(null, "Los estudiantes de la seccion no han  presentaron la evaluacion", 
						"Informacion de apliacion de evaluacion", 
						JOptionPane.INFORMATION_MESSAGE);
		    }
		    else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
						"Informacion de reporte estudiantes por nota final", 
						JOptionPane.INFORMATION_MESSAGE);
	}
	if (arg.equals("Aplicar Evaluacion")){
		if(principal.seccion.getProfesor().getCed().equals("Sin Asignar")){
		boolean presentaron=false;
		Vector<Alumno> Alumnos;
		boolean hayEstudiante;
		Alumnos=principal.seccion.getAlumnos();
		hayEstudiante=this.hayEstudiantes(principal.seccion.getAlumnos());
		if(hayEstudiante){
			presentaron=this.presentaronEvaluacion();
			if(!presentaron){
				principal.seccion.aplicarEvaluaciones(Alumnos);
		JOptionPane.showMessageDialog(null, "La seccion ha sido evaluada exitosamente", 
				"Informacion de apliacion de evaluacion", 
				JOptionPane.INFORMATION_MESSAGE);
		vistaMenu.Asignar.setEnabled(false);
		vistaMenu.Registrar.setEnabled(false);
		vistaMenu.Retirar.setEnabled(false);
		
		}
		else
			JOptionPane.showMessageDialog(null, "Los estudiantes de la seccion ya presentaron la evaluacion", 
					"Informacion de apliacion de evaluacion", 
					JOptionPane.INFORMATION_MESSAGE);
		}
		else
			JOptionPane.showMessageDialog(null, "No se han inscrito estudiantes en la seccion", 
					"Informacion de apliacion de evaluacion", 
					JOptionPane.INFORMATION_MESSAGE);   
	          }
		else
			JOptionPane.showMessageDialog(null, "No se le ha asignado profesor a la seccion", 
					"Informacion de asignacion de profesor", 
					JOptionPane.INFORMATION_MESSAGE);
	}
		if (arg.equals("Salir")){
			int opcion = JOptionPane.showConfirmDialog(new JFrame(),"Desea salir del sistema?",
				     "Mensaje de Confirmacion",JOptionPane.YES_NO_OPTION,
				     JOptionPane.QUESTION_MESSAGE);
		if (opcion == JOptionPane.YES_OPTION)
		{
			vistaMenu.dispose();
			System.exit(0);
		}
		}
		if (arg.equals("Ver Datos de seccion")){
			vistaInfSeccion vistaInfseccion=new vistaInfSeccion();
			double promedio=0;
			Vector<Alumno> alumnos;
			alumnos=principal.seccion.getAlumnos();
			promedio=principal.seccion.promedioNotas(principal.seccion.getAlumnos());
			vistaInfseccion.txtCedulaProf.setText(principal.seccion.getProfesor().getCed());
			vistaInfseccion.txtCedulaProf.setEditable(false);
			vistaInfseccion.txtNombreApeProf.setText(principal.seccion.getProfesor().getNom()+" "+principal.seccion.getProfesor().getApe());
			vistaInfseccion.txtNombreApeProf.setEditable(false);
			try {
				vistaInfseccion.txtTotalAplazados.setText(String.valueOf(principal.seccion.estudiantesAplazados(alumnos).size()));
				vistaInfseccion.txtTotalAplazados.setEditable(false);
				vistaInfseccion.txtTotalAprobados.setText(String.valueOf(principal.seccion.estudiantesAprobados(alumnos).size()));
				vistaInfseccion.txtTotalAprobados.setEditable(false);
				vistaInfseccion.txtTotaldeEst.setText(String.valueOf(alumnos.size()));
				vistaInfseccion.txtTotaldeEst.setEditable(false);
				System.out.println(principal.seccion.getProfesor().getTitulo());
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
			vistaInfseccion.txtPromedio.setText(String.valueOf(promedio));
			vistaInfseccion.txtTitulo.setText(principal.seccion.getProfesor().getTitulo());
			vistaInfseccion.txtPromedio.setEditable(false);
			vistaInfseccion.txtTitulo.setEditable(false);
			vistaInfseccion.setVisible(true);
		}
		vistaMenu.repaint();
	
	}
	public void windowClosing(WindowEvent e) {
		Window w = (Window) e.getSource();
		w.setVisible(false);
		w.dispose();
		System.out.println("Se cerro la Aplicacion!!!");
		System.exit(0);
	}

	public void itemStateChanged(ItemEvent arg0) {
		vistaMenu.repaint();
	}	
	private boolean hayEstudiantes(Vector<Alumno> Alumnos){
		   if(Alumnos.isEmpty())	
		   return false;
		      else 
			  return true;
		}
	
	private boolean presentaronEvaluacion(){
		Vector<Alumno> Alumnos;
		Alumnos=principal.seccion.getAlumnos();
		Alumno Alumno2=new Alumno();
		double nota1;
		Alumno2= Alumnos.elementAt(0);
		nota1=Alumno2.getNfinal();
		   if(nota1!=0.0)
		   return true;
		      else
			  return false;		
		}
	private static void imprimirTxt(Vector<Alumno> Alumnos,String nombreArchivo) throws FileNotFoundException{
		Alumno Alumno=new Alumno();
		FileOutputStream salida;
		salida = new FileOutputStream(nombreArchivo);
		PrintStream ps;
		ps =new  PrintStream(salida);
		ps.print("Estudiante: ");
		ps.print("\t\tCedula");
		ps.print("\t\t\tNombre");
		ps.print("\t\t\tApellido");
		ps.println("\t\t\tNota Final");
		String ced,nom,ape,nota="";
		double notaF;
		for(int k=0;k < Alumnos.size();k++){
		   Alumno= Alumnos.elementAt(k);
		   ced=Alumno.getCed()	;
		   nom=Alumno.getNom();
		   ape=Alumno.getApe();
		   notaF=Alumno.getNfinal();
		   try{			
		      do{
			  ced=ced.trim();
			    }while(ced.length()==0);
			  do{
			     nom=nom.trim();
			  	}while(nom.length()==0);
			  do{
			     ape=ape.trim();
			  	}while(ape.length()==0);
		      nota=String.valueOf(notaF);
			  do{
			  	nota=nota.trim();
			  	 }while(ced.length()==0);
		      ps.print("\t"+(k+1));
		      ps.print("\t\t"+ced);
			  ps.print("\t\t\t"+nom);
			  ps.print("\t\t\t"+ape);
			  ps.println("\t\t\t"+nota);		 
			  	 }catch(Exception E){
			        System.err.println(E);
			  	                     }
				}
		ps.close();
		};	
	
	
}
